package com.punch.user.service;


import com.punch.common.dto.user.user.PasswordDTO;
import com.punch.common.dto.user.user.UserDTO;
import com.punch.common.dto.user.user.UserOrganAuditDTO;
import com.punch.common.model.LoginUser;
import com.punch.common.page.PageInfo;
import com.punch.common.query.user.user.UserQueryInfo;
import com.punch.common.service.ISuperService;
import com.punch.common.vo.user.menu.UserMenuTreeVO;
import com.punch.common.vo.user.user.*;
import com.punch.user.model.SysUser;

import java.util.List;

/**
 * @author zlt
 * <p>
 * Blog: https://zlt2000.gitee.io
 * Github: https://github.com/zlt2000
 */
public interface UserService extends ISuperService<SysUser> {
    /**
     * 用户分页信息
     *
     * @param queryInfo 查询条件
     * @return PageInfo<UserPageVO>
     */
    PageInfo<UserPageVO> queryPage(UserQueryInfo queryInfo);

    /**
     * 机构用户分页信息
     *
     * @param queryInfo 查询条件
     * @return PageInfo<UserPageVO>
     */
    PageInfo<UserPageVO> listOrganUser(UserQueryInfo queryInfo);

    /**
     * 学校用户分页信息
     *
     * @param queryInfo 查询条件
     * @return PageInfo<UserPageVO>
     */
    PageInfo<UserPageVO> listSchoolUser(UserQueryInfo queryInfo);

    /**
     * 保存用户信息
     *
     * @param userDTO 用户表达
     * @return 用户id
     */
    Long saveUser(UserDTO userDTO);

    /**
     * 修改用户
     *
     * @param userDTO 用户表单
     */
    void updateUser(UserDTO userDTO);

    /**
     * 获取用户详情
     *
     * @param userId 用户uid
     * @param type
     * @return UserVO
     */
    UserVO getUser(Long userId, Integer type);


    /**
     * 机构审核
     *
     * @param userOrganAuditDTO 机构审核表单
     */
    void auditOrgUser(UserOrganAuditDTO userOrganAuditDTO);

    /**
     * 通过手机号查询用户、角色信息
     *
     * @param mobile 手机号
     */
    LoginUser getUserByMobile(String mobile);


    /**
     * 获取当前用户菜单
     */
    List<UserMenuTreeVO> getUserMenuTree();

    /**
     * 修改用户密码
     *
     * @param userId      用户uid
     * @param passwordDTO 密码表单
     * @return ''
     */
    String resetPassword(Long userId, PasswordDTO passwordDTO);

    /**
     * 用户启用/停用
     *
     * @param userId 用户uid
     */
    void enableUser(Long userId);

    /**
     * 学校用户分页列表
     *
     * @return List<SimpleSchoolVO>
     */
    List<SimpleSchoolVO> listUserSchool();

    /**
     * 获取机构审批失败信息
     *
     * @param userId 用户id/机构id
     * @return string
     */
    String getOrganAuditMessage(Long userId);

    /**
     * 学校下机构数量
     *
     * @return
     */
    List<SchoolOrganResultVO> organReport();

    /**
     * 学校下开课数
     *
     * @return
     */
    List<SchoolCousreResultVO> courseReport();

    /**
     * 重置密码
     *
     * @param userId 用户id
     * @return long
     */
    Long resetPwd(Long userId);

    void handlerUserArea();
}
